package _11_Polymorphic;
/**
 * 多态又叫向上转型
 * 
 * 自动类型转换 :
 * 		1.基本类型 : 低精度到高精度
 * 		2.引用类型 : 子类到父类
 * 
 * instanceof 运算符 : 判断某个对象是否由某个类实例化而来,可以避免
 * 		强制类型转换异常
 * 
 * 
 * @author lenovo
 * @Date 2020年7月10日
 * @Time 下午7:19:01
 */
public class Poly_03 {

	public static void main(String[] args) {
		Animal animal = new Cat();
		// 多态丢失子类特有属性
//		System.out.println(animal.age);

		// 需要先向下转型
		Cat c = (Cat) animal;
		System.out.println(c.age);

		// 如果把 Cat 转换为 Dog 类型会报错
		// java.lang.ClassCastException: _11_Polymorphic.Cat cannot be cast to
		// _11_Polymorphic.Dog
//		Dog d = (Dog) animal;

		// 判断之后,可以避免类型转换异常
		if (animal instanceof Cat) {
			Cat c1 = (Cat) animal;
			System.out.println(c1.age);
		} else if (animal instanceof Dog) {
			Dog d1 = (Dog) animal;
			System.out.println(d1.age);
		}
	}

}
